package com.example.chat_websocket.config;

import com.alibaba.fastjson.JSON;
import org.springframework.stereotype.Component;
import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

// 如果外部访问的话，url为：ws://localhost:8080/websocket/
// ws是http的升级协议，实现WebSocket协议
@ServerEndpoint("/websocket/{username}")
@Component
public class WebSocketEndpoint {
    // 用于识别客户端
    private Session session;

    @OnOpen
    // 打开连接方法，注解是为WebSockwt配备
    public void onOpen(Session session, @PathParam("username") String username){
        // 把会话存入到连接池中，连接池就是SessionPool类中创建的集合
        SessionPool.sessions.put(username,session);
    }

    @OnClose
    // 关闭连接方法，注解是为WebSockwt配备
    public void onClose(Session session) throws IOException {
        SessionPool.sessions.remove(session.getId());
        session.close();
    }

    @OnMessage
    // 发送消息的方法，注解是为WebSockwt配备
    // 收到客户端消息后调用此方法进行消息的转发
    // 形参message为客户端发送过来的消息，session为此客户端的session会话
    public void onMessage(String message, Session session){
        Map<String,Object> params = JSON.parseObject(message,new HashMap<String,Object>().getClass());
        SessionPool.setSessions(params,session);
    }
}
